package com.macro.mall.common.log;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

/**
 * 统一日志实体类
 * 实现统一的理想日志格式设计
 * @author tiger
 */
@Data
public class UnifiedLog {
    /**
     * 机器IP
     */
    private String ip;
    
    /**
     * 机器分组
     */
    private String group;
    
    /**
     * 环境标
     */
    private String env;
    
    /**
     * 全局链路追踪唯一标识
     */
    private String traceId;
    
    /**
     * 服务名
     */
    private String service;
    
    /**
     * 类型
     */
    private String type;
    
    /**
     * 调用的类
     */
    private String className;
    
    /**
     * 调用的方法
     */
    private String method;
    
    /**
     * 请求体JSON
     */
    private Object request;
    
    /**
     * 响应体JSON
     */
    private Object response;
    
    /**
     * 执行时间（毫秒）
     */
    private Long executeTime;
    
    /**
     * 日志时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    private Date timestamp = new Date();
    
    /**
     * 异常信息
     */
    private String exception;
    
    public UnifiedLog() {
    }
    
    // Getters and Setters

    @Override
    public String toString() {
        // 这里可以使用JSON序列化工具来格式化输出
        return "UnifiedLog{" +
                "ip='" + ip + '\'' +
                ", group='" + group + '\'' +
                ", env='" + env + '\'' +
                ", traceId='" + traceId + '\'' +
                ", service='" + service + '\'' +
                ", type='" + type + '\'' +
                ", className='" + className + '\'' +
                ", method='" + method + '\'' +
                ", request=" + request +
                ", response=" + response +
                ", executeTime=" + executeTime +
                ", timestamp=" + timestamp +
                ", exception='" + exception + '\'' +
                '}';
    }
}